溢出以及判断溢出的两种方法(单符号位和双符号位) | 您所在的位置:网站首页 › 5 5 5 5=6加什么符号 › 溢出以及判断溢出的两种方法(单符号位和双符号位) |
先让我们看一道题目 设X=-110011,Y=+100011,用补码求Z=X-Y。 解: [X]补=1 001101 [Y]补=0 100011 [-Y]补=1 011101 [X-Y]补= [X]补+[-Y]补 =1 001101+1 011101=0 101010 那这时候Z=X+Y=+101010 结果居然是正值,这很明显就是错误的(负数减正数结果应该还是负数) 出错的原因: 两个正数太大:产生进位而改变了符号位。两个负数绝对值太大:对应的补码太小,不能向符号位产生进位,使符号位相加后,向前产生进位。那什么是溢出呢? 溢出:指运算结果超过了机器数能表示的范围。 两个正数相加,结果大于机器所能表示的最大正数,称为上溢。两个负数相加,结果小于机器所能表示的最小负数,称为下溢。到这时候其实我们就可以引出一些思考 两异号数相加或两同号数相减是否会产生溢出? 仅当两同号数相加或两异号数相减时才有可能产生溢出? 很显然两异号数相加或两同号数相减决不会产生溢出。 也确实只有两同号数相加或两异号数相减时才有可能产生溢出。 证明就不多赘述了。 那怎么判断是否溢出呢? 就轮到今天的主角了——单符号法和双符号法 单符号位法 最高有效位无进位且符号位有进位时产生下溢最高有效位有进位且符号位无进位时产生上溢我个人总结就是最高位和次高位异或结果为1的话就证明产生了溢出。 双符号位法不管是否发生溢出,高位符号位代表了数真正 的符号 1、设X=+10101,Y=-01010,用补码求Z=X-Y。 解:[X]补= 00 10101,[Y]补=11 10110 [-Y]补=00 01010 [X-Y]补=[X]补+[-Y]补 =00 10101+00 01010=00 11111(无溢出) 所以X+Y=+11111。 2、两个定点小数X=+0.10111,Y=+0.10001,用 补码求Z=X+Y。 解:[X]补= 00.10111 [Y]补=00.10001 [X+Y]补= [X]补+[Y]补 =00.10111+00.10001=01.01000 (这时候我们就可以根据双符号位的规则看出发生了正溢) 3、设X=-110011,Y=+100011,用补码求Z=X-Y。 解:[X]补=11 001101 [Y]补=00 100011 [-Y]补=11 011101 [X-Y]补= [X]补+[-Y]补 =11 001101+11 011101 =10 101010 (这时候我们就可以根据双符号位的规则看出发生了负溢) 总结以上,得出补码相加的规则: 两数符号不同,相加的结果即为和的补码。两数符号相同,相加后若其和的符号不变, 则结果是和的补码。 两数符号相同,相加后若其和的符号改变, 则表示发生了溢出。两个正数相加,结果的符号为“01”,表示发生正溢出。两个负数相加,结果的符号为“10”,表示发生负溢出。 |
CopyRight 2018-2019 实验室设备网 版权所有 |